#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<string>

__thread int flag = 100;
void* rountine1(void* args)
{
    while(true)
    {
        std::cout << "我是线程１：" << flag << std::endl;
        flag--;
        pthread_exit(0);
    }
    return 0;
}
void* rountine2(void* args)
{
    while(true)
    {
        std::cout << "我是线程2：" << flag << std::endl;
        flag--;
        pthread_exit(0);
    }
    return 0;
}
int main()
{
    pthread_t tid1;
    pthread_t tid2;
    pthread_create(&tid1,nullptr,rountine1,nullptr);
    pthread_create(&tid2,nullptr,rountine2,nullptr);
    pthread_join(tid1,nullptr);
    pthread_join(tid2,nullptr);

    
    return 0;
}
// #define flag 4
// void* rountine(void* args)
// {
//     while(true)
//     {
//         std::cout << "hehe" << std::endl;
//         pthread_exit(0);
//     }
//     return 0;
// }
// void* rountine1(void* args)
// {
//     while(true)
//     {
//         std::cout << "shabi" << std::endl;
//         pthread_exit(0);
//     }
//     return 0;
// }
// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid,nullptr,rountine1,nullptr);
//     pthread_t threadarr[flag];
//     for(int i = 0;i < flag;i++)
//     {
//         pthread_create(&threadarr[i],nullptr,rountine,nullptr);
//     }
//     for(int i = 0;i < flag;i++)
//     {
//         pthread_join(threadarr[i],nullptr);
//     }
//     for(int i = 0;i < flag;i++)
//     {
        
//     }
//     return 0;
// }
// class PthreadDate
// {
//     public:
//     PthreadDate(int a,int b)
//     :_a(a),_b(b),_sum(0)
//     {
//     }
//     void Excute()
//     {
//         _sum = _a + _b;
//     }
//     int getsum()
//     {
//         return _sum;
//     }
//     ~PthreadDate()
//     {

//     }
//     int geta(){return _a;}
//     int getb(){return _b;}
//     private:
//     int _sum;
//     int _a;
//     int _b;
// };
// void* rountine(void* args)
// {
//     PthreadDate* name = static_cast<PthreadDate*>(args);
//     while(true)
//     {
//         pthread_t pthread_self(void);
//         std::cout << "我是线程："<<std::endl;
//         name->Excute();
//         std::cout << name->geta() << std:: endl << name->getb() << std::endl << name->getsum() << std::endl;
//         sleep(1);
//         pthread_exit(0);
//     }
//     return 0;
// }
// int main()
// {
//     pthread_t tid1;
//     PthreadDate* test = new PthreadDate(10,20);
//     pthread_create(&tid1,nullptr,rountine,(void*)test);

//     pthread_join(tid1,nullptr);
//     // pthread_t tid2;
//     // pthread_create(&tid2,nullptr,rountine,(void*)"thread_2");

//     // pthread_t tid3;
//     // pthread_create(&tid3,nullptr,rountine,(void*)"thread_3");

//     // pthread_t tid4;
//     // pthread_create(&tid4,nullptr,rountine,(void*)"thread_4");

//     // pthread_join(tid1,nullptr);
//     // pthread_cancel(tid1);
//     // pthread_join(tid2,nullptr);
//     // pthread_join(tid3,nullptr);
//     // pthread_join(tid4,nullptr);


//     return 0;
// }
// void* run(void* args)
// {
//     std::string name = static_cast<const char *>(args);
//     while(true)
//     {
//         pthread_t pthread_self(void);
//         std::cout << "我是一个新线程" << name << std::endl;
        
//         sleep(1);
//     }
//     return 0;
// }
// int main()
// {
//     pthread_t tid;
//     int ret;
//     if(ret = pthread_create(&tid,nullptr,run,(void*)"thread_1"));
//     std::cout  << "线程id："<< tid << std::endl;
//     pthread_join(tid,nullptr);
//     return 0;
// }